使用 Java 调用 cmd 命令 您所在的位置:网站首页 cmd 执行java文件 使用 Java 调用 cmd 命令

使用 Java 调用 cmd 命令

#使用 Java 调用 cmd 命令 | 来源: 网络整理| 查看: 265

使用 java 调用 cmd 命令时,使用如下的代码(不需要导入其他库) 

Runtime.getRuntime().exec(command); //command是需要运行的命令

但是呢,这样是运行不了的,要进行异常处理,或者将其抛出:

//这里选择异常处理 try { Runtime.getRuntime().exec(command); } catch (IOException e1) { // 改自己的异常类 e1.printStackTrace(); }

 

现在,可以运行exe文件,但是若运行 gpedit.msc devmgmt.msc 等工具无反应

解决办法是,设定cmd的运行模式(这不是java的语法,是cmd的程序参数):

#转至https://blog.csdn.net/liuyukuan/article/details/5974517 cmd /c command 执行完命令后关闭命令窗口。 cmd /k command 执行完命令后不关闭命令窗口。 cmd /c start command 会打开一个新窗口后执行命令,原窗口会关闭。 cmd /k start command 会打开一个新窗口后执行命令,原窗口不会关闭。

将命令改变后,就可以正常使用会弹出新窗口的工具了

但是,如果要调用出命令行及没有图型界面的工具或程序,则要用后面两个命令,不然不会弹出。

例如:

Runtime.getRuntime().exec("cmd /c powershell"); // 无反应 Runtime.getRuntime().exec("cmd /c start powershell"); // 成功调出powershell

个人理解是: java会在后台运行一个终端,然后再运行输入的代码,但是这个终端是不会到前台的,所以没图形界面的程序虽然能运行,但是无法显示.

 

等等,那要怎么获取命令的返回值呢?

首先,Runtime.getRuntime().exec()会返回被调用的进程,我们需要获取这个进程

接着,再通过输入流,让java程序读取被调用程序的返回值,再将其输出便可

例如:

/* 记得引入java.io中的相关包 */ // 获取进程 Process process = Runtime.getRuntime().exec("cmd /c dir"); // 运行dir命令 // 获取进程的输入流 流的方向为(唤醒的进程 -> java程序) BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; // 若读取当前行不为空,就将其输出 while ((line = reader.readLine()) != null) { System.out.println(line); } // 将流关闭,避免浪费系统资源 reader.close();

此时,java程序就会打印出DIR命令的执行结果

但是注意,cmd不能加start参数,因为加上了会创建新的终端执行,java就得不到执行结果了

 

总结:

1.  java运行可执行文件,随意使用任意一种cmd运行方式

2.  执行 *.msc 类文件,cmd要加上start参数(也就是后两种运行模式之一)开启新窗口.

3.  想要得到运行的返回值,要先获取到进程,再得到它的输入流,并且cmd不能加上start参数,否则会在新的终端窗口执行.

 

个人感觉是:带GUI程序任意,终端程序后两种,要得到返回值的话前两种

 

补充:

学生党,单纯做笔记使用,若有不足之处请指正,感激不尽!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有